﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using DevExpress.XtraEditors;
using ERP_RORZE_DLL.Product.database;
using ERP_RORZE_DLL.Product.DAO;
using System.Text.RegularExpressions;
using ERP_RORZE_PERMISSION.Base;
using BaseDAO = ERP_RORZE_TOOL.DBAccess.BaseDAO;

namespace ERP_RORZE_PRODUCT.Product.PartHandling
{
    public partial class frm_MachineHandInputAdd : DevExpress.XtraEditors.XtraForm
    {
        public event EventHandler Reload;
        ClsDMachineHandTable obj = new ClsDMachineHandTable();
        ClsPartHandlingDAO clsParthandinhDAO = new ClsPartHandlingDAO();
        DataTable dt;
        private LogUtils log;
        private bool dropDown;
        public frm_MachineHandInputAdd()
        {
            InitializeComponent();
            log = new LogUtils();
            cbMONo.LostFocus += cbMONo_LostFocus;
        }

        void cbMONo_LostFocus(object sender, EventArgs e)
        {
            DataTable dtMo =
                BaseDAO.ExecuteQuery("select MONo,PartID,MOQty,DeadLine from [242_MO] where MOno = '" + cbMONo.Text + "'");
            cbMONo.Text = cbMONo.Text.ToUpper();
                if (dtMo.Rows.Count >0)
                {
                    txtMOQty.Text = dtMo.Rows[0]["MOQty"].ToString();
                    txtDeadline.Text = dtMo.Rows[0]["DeadLine"].ToString();
                    txtPartID.Text = dtMo.Rows[0]["PartID"].ToString();
                    //dateDate.Focus();
                }
                else
                {
                    txtMOQty.Text = string.Empty;
                    txtDeadline.Text = string.Empty;
                    txtPartID.Text = string.Empty;
                    dateDate.Focus();
                }
                                     
        }

        private void btnExit_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void frm_MachineHandInputAdd_Load(object sender, EventArgs e)
        {
            //lấy danh sách MONo cho vào combo
            //dt = clsParthandinhDAO.GetlAllMONo1();
            //List<ClsMOTable> objs = new List<ClsMOTable>();
            //foreach (DataRow r in dt.Rows)
            //{
            //    ClsMOTable obj = new ClsMOTable();
            //    obj.MONo = r["MONo"].ToString();  //
            //    obj.PartID = r["PartID"].ToString();  //
            //    obj.MOQty = int.Parse(r["MOQty"].ToString());   ////
            //    obj.DeadLine = (DateTime)r["Deadline"];
            //    objs.Add(obj);
            //}

            //cbMONo.DataSource = objs;
            //cbMONo.DisplayMember = "MONo";
            //cbMONo.ValueMember = "MONo";

            //lấy danh sách StaffID cho vào combo
            dt = clsParthandinhDAO.GetlAllStaffID();
            cbStaffID.DataSource = dt;
            cbStaffID.DisplayMember = "StaffID";
            cbStaffID.ValueMember = "StaffID";
        }

        private void btnAdd_Click(object sender, EventArgs e)
        {
            //try
            //{
            int intNG = 0;
            dt = clsParthandinhDAO.GetMachHandMO(cbMONo.Text.ToUpper());
            foreach (DataRow r in dt.Rows)
            {
                intNG = intNG + int.Parse(r["SumofNG"].ToString());
            }
            int intOK = int.Parse(txtMOQty.Text) - intNG;

            //

            int intMachHandOK = 0;
            int intMachHandNG = 0;
            dt = clsParthandinhDAO.GetMachHandMO02(cbMONo.Text.ToUpper());
            foreach (DataRow r in dt.Rows)
            {
                intMachHandOK = intMachHandOK + int.Parse(r["MHOKQty"].ToString());
                intMachHandNG = intMachHandNG + int.Parse(r["MHNGQty"].ToString());
            }

            if (IsNumber(txtNGQty.Text) == false)
            {
                MessageBox.Show("Phải đảm nảo NG phải là số nguyên");
            }
            else if (int.Parse(txtNGQty.Text) < 0)
            {
                MessageBox.Show("Phải đảm nảo NG phải là số nguyên lớn hơn 0");
            }
            else if (int.Parse(txtNGQty.Text) > intNG)
            {
                MessageBox.Show("Số lượng NG trong bộ phận gia công là: "+ intNG+". Kiểm tra lại số lượng giao nhận");
            }
            else if (IsNumber(txtOKQty.Text) == false)
            {
                MessageBox.Show("Phải đảm bảo OK là số nguyên");
            }
            else if (int.Parse(txtOKQty.Text) < 0)
            {
                MessageBox.Show("OK phải là số nguyên dương");
            }
            else if (int.Parse(txtOKQty.Text) > intOK)
            {
                MessageBox.Show("Số lượng OK trong bộ phận gia công là: "+intOK+". Kiểm tra lại số lượng giao nhận");
            }
            else if (txtOKQty.Text == "0" && txtNGQty.Text == "0")
            {
                MessageBox.Show("Số sản phẩm OK và NG không thể đồng thời bằng 0");
            }
            else if(int.Parse(txtOKQty.Text) + intMachHandOK > intOK)
            {
                MessageBox.Show("Số lượng OK của MO này là: "+intOK+". Bộ phận Hand Finish nhận được:"+ intMachHandOK+" sản phẩm. Kiểm tra lại số lượng giao nhận");
            }
            else if (int.Parse(txtNGQty.Text) + intMachHandNG > intNG)
            {
                MessageBox.Show("Số lượng NG của MO này là: " + intNG + ". Bộ phận Hand Finish nhận được:" + intMachHandNG + " sản phẩm. Kiểm tra lại số lượng giao nhận");
            }
            else
            {
                obj.Date = dateDate.Value;
                obj.MONo = cbMONo.Text.ToUpper();
                obj.StaffID = cbStaffID.Text;
                obj.NGQty = int.Parse(txtNGQty.Text);
                obj.OKQty = int.Parse(txtOKQty.Text);
                obj.Finished = checkBox1.Checked;
                obj.Note = txtNote.Text;
                clsParthandinhDAO.InsertMAchineHandDetail(obj);

                //write Log
                log.Table = LogConstant.Table.Product.Machine_Hand;
                log.Task = LogConstant.Task.Insert;
                log.Description = "MONo: " + obj.MONo + "; Date: " + obj.Date;
                log.WriteLog();

                MessageBox.Show("Đã nhập xong");
                //Reload(sender, e);
                cbMONo.Text = "";
                txtMOQty.Text = "";
                txtNGQty.Text = "0";
                txtOKQty.Text = "0";
                txtPartID.Text = "";
                txtDeadline.Text = "";
                txtStaffName.Text = "";
                cbMONo.Focus();
            }
            //}
            //catch
            //{
            //    MessageBox.Show("NGQty, OKQty, SPQty phải là kiểu số");
            //}
        }

        private void label4_Click(object sender, EventArgs e)
        {

        }

        private void checkBox1_CheckedChanged(object sender, EventArgs e)
        {

        }

        private void cbMONo_SelectedValueChanged(object sender, EventArgs e)
        {
            //ClsMOTable obj = ((ClsMOTable)cbMONo.SelectedItem);
            //txtMOQty.Text = obj.MOQty.ToString();
            //txtDeadline.Text = obj.DeadLine.ToString();
            //txtPartID.Text = obj.PartID.ToString();
        }

        public bool IsNumber(string pText)
        {
            Regex regex = new Regex(@"^[-+]?[0-9]*\.?[0-9]+$");
            return regex.IsMatch(pText);
        }

        protected override bool ProcessKeyPreview(ref Message m)
        {
            if (m.Msg == 0x0100 && (int)m.WParam == 13)
            {
                this.ProcessTabKey(true);
            }
            return base.ProcessKeyPreview(ref m);
        }

        private void cbStaffID_SelectedIndexChanged(object sender, EventArgs e)
        {
            DataTable dtCheck =
                BaseDAO.ExecuteQuery("Select [StaffID], [StaffName] from [222_Staff] where [StaffID] = '" +
                                     cbStaffID.SelectedValue + "'");
            if (dtCheck.Rows.Count>0)
            {
                txtStaffName.Text = dtCheck.Rows[0]["StaffName"].ToString();
            }
            else
            {
                txtStaffName.Text = "";
            }
        }

        private void frm_MachineHandInputAdd_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.Alt)
            {
                if (e.KeyCode == Keys.D)
                {
                    this.btnAdd.PerformClick();
                }
            }
            else if (e.KeyCode == Keys.End)
            {
                btnAdd.Focus();
            }
            else if (e.KeyCode == Keys.Home)
            {
                dateDate.Focus();
            }
        }

        protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
        {
            // Add controls for which Arrow keys => focus is not required.
            if ((!dropDown && (ActiveControl is TextBox || ActiveControl is System.Windows.Forms.ComboBox || ActiveControl is System.Windows.Forms.DateTimePicker)))
            {
                switch (keyData)
                {
                    case Keys.Up:
                        //case Keys.Down:

                        //bool forward = (keyData == Keys.Down);
                        if (this.ProcessTabKey(false))
                        {
                            return true;
                        }

                        break;
                }
            }
            return base.ProcessCmdKey(ref msg, keyData);
        }

        private void cbMONo_DropDown(object sender, EventArgs e)
        {
            dropDown = true;
        }

        private void cbMONo_DropDownClosed(object sender, EventArgs e)
        {
            dropDown = false;
        }

        private void txtOKQty_Enter(object sender, EventArgs e)
        {
            ((TextBox)sender).SelectAll();
        }

    }
}